<!doctype html>
<html>
  <head>
    <title>Notifications: The Notification.permission property reflects the permission status.</title>
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
      // Tests that the Notification.permission property reflects the current
      // permission level of notifications for the current origin. This test
      // requires the TestRunner.
      // This test is doing some hacks to make sure the internal representation
      // is correctly updated before calling Notification.permission because
      // testRunner.setPermission() and Notification.permission might end up
      // in a race given the synchronous aspect of the latter.
      var notificationsPermissionsTest = async_test("Notification.permission reflects th actual permission.");

      var testIndex = 0;
      var tests = [
        function() {
          testRunner.setPermission('notifications', 'prompt', location.origin, location.origin);
          navigator.permissions.query({name:'notifications'}).then(function() {
            // "default" indicates that no permission request has been answered.
            assert_equals(Notification.permission, 'default');

            notificationsPermissionsTest.step(tests[++testIndex]);
          });
        },
        function() {
          testRunner.setPermission('notifications', 'denied', location.origin, location.origin);
          navigator.permissions.query({name:'notifications'}).then(function() {
            // "default" indicates that no permission request has been answered.
            assert_equals(Notification.permission, 'denied');

            notificationsPermissionsTest.step(tests[++testIndex]);
          });
        },
        function () {
          testRunner.setPermission('notifications', 'granted', location.origin, location.origin);
          navigator.permissions.query({name:'notifications'}).then(function() {
            // "default" indicates that no permission request has been answered.
            assert_equals(Notification.permission, 'granted');

            notificationsPermissionsTest.step(tests[++testIndex]);
          });
        },
        function () {
          notificationsPermissionsTest.done();
        }
      ];

      notificationsPermissionsTest.step(function() {
        if (!window.testRunner) {
            assert_unreached('This test requires the TestRunner for working correctly.');
            return;
        }
        notificationsPermissionsTest.step(tests[testIndex]);
      });
    </script>
  </body>
</html>
